
        <html>
			<head>
			     <title>Wargama-leviathan Writeup - litao3rd</title>
				 <meta http-equiv="content-type" content="text/html; charset=UTF-8">
			</head>
			<body>
				<h1>原文地址:<a href="http://drops.wooyun.org/tips/5305">http://drops.wooyun.org/tips/5305</a></h1>
				
      <p>
        <h1>level 0</h1>

<hr />

<p>这一关就是一个简单的游戏介绍，当然，还有明文的账号密码。打开网页就能看到，不再叙述。</p>

<h1>level 0 -> 1</h1>

<hr />

<p>使用上一关得到的账号和密码，<code>ssh</code> 登陆到目标机器。</p>

<!--more-->

<p><img src="http://static.wooyun.org/drops/20150324/2015032403473519053.png" alt="ssh_level1.png" /></p>

<p>在主目录下面，我们可以发现一个<code>.backup</code>文件夹，进入文件夹，发现了一个<code>html</code>文件，看样子是浏览器收藏夹文件。我猜测密码应该是在文件中以明文形式出现，用关键字<code>leviathan</code>进行搜索，立刻就能得到密码。<code>the password for leviathan1 is rioGegei8m</code>。这道题应该就是让你熟悉命令的。</p>

<p><img src="http://static.wooyun.org/drops/20150324/2015032403473669159.png" alt="leviathan_password_level1" /></p>

<h1>level 1 -> 2</h1>

<hr />

<p>使用上一个level得到的密码，ssh到下一个level。在这关的<code>home</code>目录里面，我们看到一个名为<code>check</code>的<code>set-uid</code>程序，执行程序，看看程序执行结果。</p>

<p><img src="http://static.wooyun.org/drops/20150324/2015032403473675159.png" alt="leviathan_check_level1" /></p>

<p>程序要求我们输入一个密码，好吧。我不知道该输入什么，猜想程序应该是将我们的输入和某个密码做比较，然后再执行。随便输入一个，观察结果。</p>

<p><img src="http://static.wooyun.org/drops/20150324/2015032403473717756.png" alt="leviathan_check_failure_level1" /></p>

<p>打开<code>GDB</code>神器，看看它内部到底是个什么东西。</p>

<p><img src="http://static.wooyun.org/drops/20150324/2015032403473722401.png" alt="leviathan_gdb_level1.png" /></p>

<p>从图中我们可以看看出来，程序三次调用<code>getchar()</code>，猜想，<code>password</code>应该是三个字符。<code>strcmp()</code>函数的一个参数是我们输入的字符的存储起始地址，另一个地址是<code>0x18(%esp)</code>，程序一开始在这里存储了一个值<code>0x786573</code>，然后将两个地址作为实参送入<code>strcmp()</code>，所以猜想，这里<code>0x18(%esp)</code>就是我们需要的密码。这个值正好是<code>sex</code>的十六进制格式，于是，得到密码是<code>sex</code>。输入程序，得到下一个level的密码。</p>

<p><img src="http://static.wooyun.org/drops/20150324/2015032403473862494.png" alt="leviathan_crack_level1" /></p>

<h1>level 2 -> 3</h1>

<hr />

<p>在这个level的<code>home</code>目录里面，依然是一个<code>set-uid</code>的程序，执行程序得到如下结果，还是要使用神器<code>gdb</code>。</p>

<p><img src="http://static.wooyun.org/drops/20150324/2015032403473871490.png" alt="leviathan_home_level2" /></p>

<p>使用<code>gdb</code>打开程序，这个程序主函数反汇编出来的结果有点长，不过貌似没有看到子函数调用，只有一个主函数。</p>

<p><img src="http://static.wooyun.org/drops/20150324/2015032403473971009.png" alt="leviathan_gdb_level2" /></p>

<p>这个程序首先进行了参数检查，如果没有命令行参数输入，则打印出错信息，然后退出。之后使用<code>access()</code>进行文件权限检查，如果没有权限，则打印出错信息，然后退出。然后再使用<code>system()</code>函数执行<code>/bin/cat fileinput</code>这个命令。</p>

<p><img src="http://static.wooyun.org/drops/20150324/2015032403473933545.png" alt="leviathan_error_level2" /></p>

<ul>
<li>根据<code>access()</code>的手册，<code>access()  checks whether the calling process can access the file pathname.  If **pathname** is a symbolic link, it is dereferenced.</code></li>
</ul>

<p>这就意味着我们不能利用<code>符号链接</code>来过这个权限检查。</p>

<p>从<code>gdb</code>的反汇编代码，我们可以得到，程序使用输入的命令行参数构造了<code>/bin/cat argv[1]</code>这个字符串，然后送入<code>system()</code>这个函数执行。于是我猜想到构造这么一个字符串<code>/bin/cat &lt; /etc/leviathan_pass/leviathan2</code>。这样就可以通过权限检查，然后得到密码了。</p>

<ul>
<li>构造一个文件，名为<code>&lt;file</code></li>
<li>构造一个符号链接， <code>file-&gt;/etc/leviathan_pass/leviathan2</code></li>
</ul>

<p>这样，系统进行权限检查的时候，则检查的是<code>&lt;file</code>这个文件的权限，但是执行命令的时候却是<code>/bin/cat &lt; file</code>这个命令。</p>

<p><img src="http://static.wooyun.org/drops/20150324/2015032403473942929.png" alt="leviathan_pass_level2" /></p>

<h1>level 3 -> 4</h1>

<hr />

<p>还是一个<code>set-uid</code>程序，老流程走起，打开程序，看看它是那个小怪。</p>

<p><img src="http://static.wooyun.org/drops/20150324/2015032403474041107.png" alt="leviathan_home_level3" /></p>

<p>还是要<code>gdb</code>走起啊。</p>

<p><img src="http://static.wooyun.org/drops/20150324/2015032403474026017.png" alt="leviathan_gdb_main_level3" /></p>

<p>这里的<code>strcmp()</code>函数为什么调用我没有理解，或许是为了干扰吧，在<code>main()</code>函数中有一个<code>do_stuff()</code>函数调用，整个程序的逻辑应该在这个函数里面。</p>

<p><img src="http://static.wooyun.org/drops/20150324/2015032403474163770.png" alt="leviathan_gdb_do_stuff_level3" /></p>

<p>可以看到，在<code>do_stuff()</code>函数中有<code>strcmp()</code>和<code>system()</code>等比较，<code>strcmp()</code>的其中一个实参来自于<code>fgets()</code>函数的返回结果，另一个参数存储在<code>-0x117(%ebp)</code>，从图中可以看出来，存储在<code>-0x117(%ebp)</code>的参数就是待匹配的密码。</p>

<p><img src="http://static.wooyun.org/drops/20150324/2015032403474118276.png" alt="leviathan_gdb_pass_level3" /></p>

<p>将密码输入到程序中，就可以得到一个<strong>shell</strong>，进而得到下一个level的密码。</p>

<p><img src="http://static.wooyun.org/drops/20150324/2015032403474213853.png" alt="leviathan_pass_level3" /></p>

<h1>level 4 -> 5</h1>

<hr />

<p>好吧，这一个level的文件在<code>.trash</code>文件夹中了，依旧是熟悉的流程。</p>

<p><img src="http://static.wooyun.org/drops/20150324/2015032403474255678.png" alt="leviathan_home_level4" /></p>

<p>从程序输出看，应该是密码被转换成二进制输出了，或者是加密之后转换成二进制输出，这个还是得要祭起<code>gdb</code>神器来帮忙了。</p>

<p><img src="http://static.wooyun.org/drops/20150324/2015032403474339910.png" alt="leviathan_gdb_main_level4" /></p>

<p>从这个循环过程中，我们可以看到，程序对密码的每个字符，从最高位（符号位）开始计算，每次输出一个<code>字符0</code>或者<code>字符1</code>，所以可以得到，该<code>bin</code>程序是将密文的每个字符转换成二进制格式输出。单步调试的时候，程序在调用<code>fopen("/etc/leviathan_pass/leviathan5"， "r")</code>的时候返回错误，导致调试无法进行。看来，直接查看内存获得密码的方法是行不通了，只能写脚本，处理程序的输出了。</p>

<pre><code>#!python
#!/usr/bin/env python
#coding=utf-8

if __name__ == "__main__":
        try:
                fp = open("log.txt", "r")
        except:
                print "file open error"
        for i in range(12):
                byte = fp.read(9).strip()
                value = (int(byte, 2)) &amp; 0xFF
                #print value
                char = chr(value)
                print char,
</code></pre>

<blockquote>
  <p><strong><code>python</code>代码写得不是一丁点的丑，实在是因为用得不多！</strong></p>
</blockquote>

<p><img src="http://static.wooyun.org/drops/20150324/2015032403474339546.png" alt="leviathan_pass_level4" /></p>

<p>把密码中的空格剔除就是正确的密码了。</p>

<h1>level 5 -> 6</h1>

<hr />

<p>还是熟悉的流程，熟悉的味道。</p>

<p><img src="http://static.wooyun.org/drops/20150324/2015032403474490804.png" alt="leviathan_home_level5" /></p>

<p>似乎<code>/tmp/file.log</code>这个路径被硬编码到了程序中了，还是要看看这个程序到底做了什么事情。</p>

<p><img src="http://static.wooyun.org/drops/20150324/2015032403474490477.png" alt="leviathan_gdb_main_level5" /></p>

<p>确实是被硬编码到了程序中去了，尝试着在该路径下建立一个指向密码文件的<strong>符号链接</strong>文件，发现居然成功了。</p>

<p><img src="http://static.wooyun.org/drops/20150324/2015032403474524511.png" alt="leviathan_pass_level5" /></p>

<p>好吧，这一个level实在是有点开玩笑啊。。。。</p>

<h1>level 6 -> 7</h1>

<hr />

<p>哈哈，这个level似乎有不一样的味道，虽然还是熟悉的流程。</p>

<p><img src="http://static.wooyun.org/drops/20150324/2015032403474557608.png" alt="leviathan_home_level6" /></p>

<p>这里，这个<code>set-uid</code>程序需要输入一个<code>4 digit code</code>，懒得再去用<code>gdb</code>反汇编了，我估计也不太好反，做了混淆应该。干脆就来个爆破吧。</p>

<pre><code>#!python
#!/usr/bin/env python
#coding=utf-8

import os

for pincode in range(10000):
        cmd = "~/leviathan6 %04d" %(pincode)
        # for debug
        #print "test %s" %(cmd)
        ret = os.popen(cmd).read()
        if ret.find("Wrong") == -1:
                print "maybe success in %s" %(cmd)
</code></pre>

<p>程序在<code>7123</code>那里停止了，我猜想是跑到了<code>shell</code>里面去了。尝试了一下，果然是这样的。</p>

<p><img src="http://static.wooyun.org/drops/20150324/2015032403474585151.png" alt="leviathan_pass_level6" /></p>

<h1>level 7</h1>

<hr />

<p><code>ssh</code>登陆到<code>level 7</code></p>

<p><img src="http://static.wooyun.org/drops/20150324/2015032403474645580.png" alt="leviathan_home_level7" /></p>

<p>好吧，我纯粹是为了混一个邀请码，才写这个<code>writeup</code>的。要不然我肯定遵守这个规则！</p>

<h1>end</h1>

<hr />

<p>Bingo！这个<code>wargame</code>就这样结束了，题目确实挺简单的，完全是为了新手学习，知道怎么玩<code>wargames</code>。</p>

<p>更多关于<code>wargames</code>的信息，请参考<a href="http://overthewire.org/wargames/">这里</a>!</p>      </p>
    
			</body>
		</html>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          